home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 676-700 / 699 / iffconvert / src / filereq.c next >
C/C++ Source or Header  |  1995-03-18  |  3KB  |  105 lines

  1. /* Stuff for the filerequester of reqtools.library */
  2.  
  3. #include <libraries/reqtools.h>
  4. #include <intuition/intuition.h>
  5. #include <functions.h>
  6.  
  7. struct ReqToolsBase *ReqToolsBase;
  8.  
  9. void * rtAllocRequestA();
  10.  
  11. static struct rtFileRequester *filereq=NULL;
  12. static char *returnstring=NULL;
  13. static char filename[128]="";
  14.  
  15. static char *modestr[]={"Load picture","Save picture","Delete file"};
  16. static char *gadtxt[]={"Load","Save","Delete"};
  17.  
  18. #define RED(s) ((s)>>8)
  19. #define GREEN(s) (((s)>>4)&0xf)
  20. #define BLUE(s) ((s)&0xf)
  21.  
  22. InitRequest()
  23. {
  24.    if (filereq = rtAllocRequestA ((ULONG)RT_FILEREQ, NULL))
  25.       return(0); /* all OK */
  26.    else return(1); /* No Memory */
  27. }
  28.  
  29. FreeRequest()
  30. {
  31.    if(filereq) rtFreeRequest(filereq);
  32.    filereq=NULL;
  33.    if(returnstring) free(returnstring);
  34.    returnstring=NULL;
  35. }
  36.  
  37. static char *catstring(s1,s2)
  38. char *s1,*s2;
  39. {
  40.    char *calloc();
  41.    int len1,len2;
  42.    len1=strlen(s1);
  43.    len2=strlen(s2);
  44.    if(returnstring) free(returnstring);
  45.    returnstring=NULL;
  46.    if(s1[len1-1]==':') {
  47.       returnstring=calloc(len1+len2+1);
  48.       if(!returnstring) return(0L);
  49.       strcpy(returnstring,s1);
  50.       strcat(returnstring,s2);
  51.       return(returnstring);
  52.    } else {
  53.       returnstring=calloc(len1+len2+2);
  54.       if(!returnstring) return(0L);
  55.       strcpy(returnstring,s1);
  56.       strcat(returnstring,"/");
  57.       strcat(returnstring,s2);
  58.       return(returnstring);
  59.    }
  60. }
  61.  
  62. char *FileRequest(win,mode)
  63. struct Window *win;
  64. short mode;
  65. {
  66.    long col0,col1;
  67.    char *ret;
  68.  
  69.    col0=GetRGB4(win->WScreen->ViewPort.ColorMap,0L);
  70.    col1=GetRGB4(win->WScreen->ViewPort.ColorMap,1L);
  71.  
  72.    SetRGB4(&win->WScreen->ViewPort,0L,0L,0L,0L);
  73.    SetRGB4(&win->WScreen->ViewPort,1L,15L,15L,15L);
  74.  
  75.    if(mode) {
  76.       if(rtFileRequest(filereq,filename,modestr[mode],
  77.          (ULONG)RT_Window,win,
  78.          (ULONG)RTFI_OkText,gadtxt[mode],
  79.          (ULONG)RTFI_Flags,(ULONG)FREQF_SAVE,(ULONG)TAG_END)) {
  80.          ret=catstring(filereq->Dir,filename);
  81.          rtFreeReqBuffer(filereq);
  82.          SetRGB4(&win->WScreen->ViewPort,0L,RED(col0),GREEN(col0),BLUE(col0));
  83.          SetRGB4(&win->WScreen->ViewPort,1L,RED(col1),GREEN(col1),BLUE(col1));
  84.          return(ret);
  85.       } else {
  86.          SetRGB4(&win->WScreen->ViewPort,0L,RED(col0),GREEN(col0),BLUE(col0));
  87.          SetRGB4(&win->WScreen->ViewPort,1L,RED(col1),GREEN(col1),BLUE(col1));
  88.          return(NULL);
  89.       }
  90.    } else {
  91.       if(rtFileRequest(filereq,filename,modestr[mode],
  92.          (ULONG)RTFI_OkText,gadtxt[mode],
  93.          (ULONG)RT_Window,win,(ULONG)TAG_END)) {
  94.          SetRGB4(&win->WScreen->ViewPort,0L,RED(col0),GREEN(col0),BLUE(col0));
  95.          SetRGB4(&win->WScreen->ViewPort,1L,RED(col1),GREEN(col1),BLUE(col1));
  96.          return(catstring(filereq->Dir,filename));
  97.       } else {
  98.          SetRGB4(&win->WScreen->ViewPort,0L,RED(col0),GREEN(col0),BLUE(col0));
  99.          SetRGB4(&win->WScreen->ViewPort,1L,RED(col1),GREEN(col1),BLUE(col1));
  100.          return(NULL);
  101.       }
  102.    }
  103. }
  104.  
  105.